#include "mmodel.h"
#include <QDebug>
MModel::MModel(int num):Model(num)
{
    matrix=new int*[num];
    for(int i=0;i<num;i++)
    {
        matrix[i]=new int[num];
        for(int j=0;j<num;j++)
            matrix[i][j]=INF;
    }
}

void MModel::addEdge(int start, int end, int length)
{
    matrix[start][end]=length;
}

MModel::MModel(const MModel &another):Model(another)
{
   // qDebug()<<"调用子类析构函数";
    matrix=new int*[num];
    for(int i=0;i<num;i++)
    {
        matrix[i]=new int[num];
        for(int j=0;j<num;j++)
            matrix[i][j]=another.matrix[i][j];
    }
}

MModel::~MModel()
{
    for(int i=0;i<num;i++)
        delete[] matrix[i];
    delete[] matrix;
}

void MModel::updateDistance()
{
    for(int i=0;i<num;i++)  //遍历该点所有边
    {
       if(distance[current]+matrix[current][i]<distance[i])//如果经过当前点再到下一个点比之前的距离小了
       {
            distance[i]=distance[current]+matrix[current][i];//更新到达该点的距离
            int temp=path[i].size();
            /*舍弃之前的路径*/
            for(int j=0;j<temp;j++)
                path[i].pop_back();
            /*填补新路径*/
            temp=path[current].size();
            for(int j=0;j<temp;j++)
                path[i].push_back(path[current][j]);
            path[i].push_back(i);
       }
    }
}
